0%

Java的概述和环境搭建

一,Java的概述和环境搭建

1.1 什么是程序

程序:解决生活中实际问题的由一系列指令组成的集合,即是软件、APP

程序开发:制作软件

1.2 Java的历史与特点

1995年由SUN公司开发的面向对象的程序设计语言,创始人高斯林称作Java之父

Java:JavaME、JavaSE、JavaEE

2004年发布JDK1.5,更名为Java5

2009年被Oracle收购

2014年Oracle发布Java8

特点:

  1. 面向对象
  2. 跨平台性:跨操作系统、服务器
  3. 安全性
  4. 健壮性

1.3 Java的运行机制

先编译,后运行

.java文件(编译)->.class二进制字节码文件(运行)

JDK:Java Development Kit,Java开发工具

​ 包含:JRE + 类库 + 工具包(编译器、调试工具)

JRE:Java Runtime Enviroment,Java运行环境

​ 包含:JVM + 解释器

JVM:Java Vitrual Machine,Java虚拟机

​ 使用软件在不同的操作系统中,模拟相同的Java运行环境,使Java程序得以运行

1.4 Java的环境搭建

JDK的下载:https://www.oracle.com/java/technologies/javase-downloads.html

卸载:控制面板直接卸载即可

安装:双击即可,不要安装在有中文的路径下,jdk和jre要保持在同一个目录下

环境变量的配置:

  1. 右键“此电脑”,点击“属性”,点击“高级系统设置”,在“高级”标签下,选择“环境变量”
  2. 在“系统变量”中,点击“新建”,在“变量名”中输入JAVA_HOME,在“变量值”中输入C:\Program Files\Java\jdk1.8.0_152
  3. 点击“系统变量”中“Path”,点击“编辑”,添加%JAVA_HOME%\bin%JAVA_HOME%\jre\bin

1.5 第一个Java程序

1.5.1 编写代码
1
2
3
4
5
public class HelloWorld{
public static void main(String[] args){
System.out.println("五五开");
}
}

Java文件的扩展名是.java

1.5.2 编译代码

通过javac指令对Java文件进行编译,编译后会生成对应的.class二进制字节码文件

步骤:

  1. 按下win + r,输入cmd,按下回车,打开命令提示符

  2. 输入:

    1
    cd java文件所在的位置

    切换cmd的执行指令的位置是在当前Java文件所在的位置

  3. 输入:

    1
    javac 文件名.java
1.5.3 运行程序

通过java指令对编译后的.class执行,从而运行程序

在上述的cmd中继续输入:

1
java 文件名
1.5.4 注意事项
  1. 同一个Java文件可以定义多个类,但是只能有一个类是public的,并且该文件的文件名必须与这个被public修饰的类的类名一致

  2. 任何一个类在被编译后都会生成一个唯一的.class文件

  3. 一个类中,只能有一个主方法,每个类都可以有自己的主方法

  4. Java代码都是以;}结尾

  5. Java中所有的括号必须成对出现

  6. 任何一个程序必须有一个主函数,主函数也叫主方法是程序的入口,主函数必须被定义成如下:

    1
    2
    3
    public static void main(String[] args){

    }
  7. 层级之间必须有良好的缩进

1.6 Java的语言规范

1.6.1 注释

注释:对代码进行解释说明的文本

单行注释:// 注释内容

多行注释:/* 注释内容 */

文档注释:/** 注释内容 */,有文档注释的代码,可以通过以下指令生成外部文档API

1
javadoc -d . HelloWorld.java

注:注释不参与编译、运行

1.6.2 关键字

概念:在Java中已经预先定义好的具有特殊含义的单词

例如:public、class、static、void

注:main不是关键字

1.6.3 标识符

概念:类、方法、变量的名字都是标识符

规则:

  1. 可以由数字、字母、下划线、美元符组成
  2. 数字不能开头
  3. 不能与关键字重名

规范:

  1. 变量和方法:首字母小写,多个单词组成时,从第二个单词起每个单词的首字母大写(小驼峰)
  2. 类和接口:每个单词的首字母大写(大驼峰)
  3. 常量:所有字母大写,多个单词组成时,单词之间用下划线连接

二,Java的基础语法

2.1 常量

概念:不能变化的数据

分类:

  1. 整数常量:所有整数

  2. 小数常量:所有小数

  3. 字符串常量:所有字符串,

    字符串:一串字符,若干个字符组成的有序序列,字符串必须使用一对双引号括起来

  4. 字符常量:任何一个字符

    例如:’1’、’+’、’a’、’Z’、’是’,由一对单引号括起来的单个字符,不能有空字符

2.2 数据类型

在Java中有严格的数据类型的划分(强类型的语言)

在Java任何一个值,都有所对应的类型

分类:

  1. 基本数据类型
  2. 引用数据类型
2.2.1 基本数据类型
  1. 整数类型

    1. byte:字节型,1个字节,范围:-2^7 ~ 2^7-1 也就是 -128 ~ 127
    2. short:短整型,2个字节,范围:-2^15 ~ 2^15-1 也就是-32768 ~ 32767
    3. int:整型,默认整型,4个字节,范围:-2^31 ~ 2^31-1
    4. long:长整型,8个字节,范围:-2^63 ~ 2^63-1
  2. 小数类型(浮点类型)

    1. float:单精度浮点类型,4个字节,

      负数范围:-3.4E38 ~ -1.4E-45 正数范围:1.4E-45 ~ 3.4E38

    2. double:双精度浮点类型,8个字节,默认小数

      负数范围:-1.7E308 ~ -4.9E-324 正数范围:4.9E-324 ~ 1.7E308

  3. 字符类型

    1. char:2个字节,范围:0 ~ 65535,它遵循Unicode万国码,字符值必须使用一对单引号括起来,有且只能有一个字符
  4. 布尔类型

    1. boolean:1个字节,取值范围:true/false,描述成”满足条件”/“不满足条件”
2.2.2 引用数据类型
  1. 字符串:Java 程序中的所有字符串字面值(如 "abc" )都是字符串值,字符串中允许没有字符,称为空字符串,简称空串

    定义格式:同基本数据类型的定义

    1
    2
    3
    String 变量名1 = 值;
    String 变量名2;
    变量名2 = 值;
  2. 数组

  3. 对象

2.2.3 转义字符

Java中可以通过对特定字符进行转义,来表示其他含义

例如:

1
2
3
public static void main(String[] args){
System.out.println(''');// 这句话编译失败,我们需要对中间的单引号进行转义
}

转义符号:\

常见的转义:

  1. \n:换行符
  2. \t:制表符(缩进)
  3. \':单引号
  4. \":双引号
  5. \\:反斜杠

2.3 变量

2.3.1 变量的概念

计算机内存中的一块存储空间,是存储数据的基本单元

2.3.2 变量的定义
  1. 先定义,后赋值

格式:

1
2
数据类型 变量名;
变量名 = 值;
  1. 定义的同时赋值

格式:

1
数据类型 变量名 = 值;
  1. 同时为多个同类型的变量定义和赋值

格式:

1
数据类型 变量名1,变量名2 = 值,变量名3 = 值,变量名4,...;

注:

  1. 在同一个代码块中变量名不能重复
  2. 变量必须先赋值才能使用
  3. 赋值的类型必须与变量的类型一致
  4. 赋的值必须在指定类型范围中
  5. 将小数赋值给float类型的变量时,需要加上f或者F
  6. 一个超过int范围的整数必须加上l或者L

2.4 运算符

2.4.1 算术运算符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+:求和运算,如果参与运算的数据中有字符串,那么“+”就是拼接,拼接后的结果仍然是字符串
-:求差
*:求乘积
/:求商,整数之间的除法可能存在精度损失
%:取模,求余数
注:
1.a % b,如果a < b,结果就是a
2.a % b,如果a > b,结果是[0,b-1]
3.a % b结果是正负与a一致
++(自增1)、--(自减1):
自增和自减的前置和后置:将++、--运算符写在变量前称为前置;反之,称为后置
1.在单独运算时,前置和后置没有区别
2.在复合运算时,
1)前置:先执行自增(减),再执行其他操作
2)后置:先执行其他操作,再执行自增(减)
2.4.2 赋值运算符
1
2
3
4
5
6
=:赋值,将=右边表达式的结果运算完毕后,赋值给=左边的变量
+=:a += b 等价于 a = a + b
-=:a -= b 等价于 a = a - b
*=:a *= b 等价于 a = a * b
/=:a /= b 等价于 a = a / b
%=:a %= b 等价于 a = a % b
2.4.3 逻辑运算符
1
2
3
4
&:与,并且,表达式两边只要出现了false,整个表达式的结果就是false
|:或,或者,表达式两边只要出现了true,整个表达式的结果就是true
!:非,取反,true的取反结果是falsefalse的取反结果是true
^:异或,表达式两边相同结果是false,两边不同结果是true
1
2
&&:表达式左边为false,表达式右边不再运算,整个表达式的结果是false
||:表达式左边为true,表达式右边不再运算,整个表达式的结果是true

注:

  1. 逻辑运算符参与运算的数据和运算的结果一定是布尔值
  2. 多个布尔值的逻辑运算仍然遵循上述特点
2.4.4 关系运算符
1
2
3
4
5
6
>
<
>=
<=
==:比较两个值是否相等
!=:比较两个值是否不相等

注:

  1. 关系运算符的结果是布尔值
  2. 表达式两边的数据类型必须是相同的,或者可以互相转换的
2.4.5 三元运算符

格式:

1
表达式1 ? 表达式2 : 表达式3

逻辑:运算表达式1,结果为true执行表达式2;反之,执行表达式3

注:

  1. 表达式1运算的结果必须是一个布尔值
  2. 表达式2、表达式3必须执行一个,并且只会执行一个
  3. 表达式2、表达式3可以是值,也可以是表达式,不能是语句
2.4.6 位运算
1
2
3
&:按位与
|:按位或
^:按位异或

将十进制数转换成二进制,按位进行与、或、异或的运算,再将最后的结果转换成十进制数

转换成的二进制数中的0视作false,1视作true,进行逻辑运算,运算完毕后,再转换成0或1

1
2
3
System.out.println(3 & 4);
System.out.println(6 | 5);
System.out.println(4 & 5 | 6 ^ 7);//5

左移:将十进制数转换成二进制数,向左移动指定的位数,移动后用0补全,最后转换成十进制数

公式:a << b 等价于 a乘以2的b次方

2.5 数据类型转换

问:两种不同类型的数据是否可以一起运算?

答:可以

2.5.1 自动类型转换

概念:范围小的数据与范围大的数据运算时,结果会自动转换成范围大的数据类型

自动类型转换的规则:

double > float > long > int > short > byte

注:

1
2
3
4
byte b = 120;// 编译通过,原因是120是常量,程序在执行过程中,不会发生变化

int i = 120;
byte c = i;// 编译失败,原因是i是int类型的变量,程序在执行过程中,i可能发生变化从而超出byte的范围
  1. 数据类型所占的空间大小(字节)与所能表示的数据范围无关
2.5.2 强制类型转换

概念:范围大的数据赋值给范围小的数据类型的变量

格式:

1
范围小的数据类型 变量名 = (范围小的数据类型)范围大的数据类型的数据;

注:

  1. 强制类型转换可能出现精度损失、数据错误等问题,所以慎用

    1
    2
    3
    4
    5
    6
    float f = 20.886f;
    long l = (long)f;
    System.out.println(l);// 20

    byte bb = (byte)128;
    System.out.println(bb);// -128
  2. byte和short之间运算的结果是int

  3. 如果表达式的运算结果超过了范围,需要对整个表达式的结果进行强制类型转换

    1
    2
    3
    4
    byte b1 = 3;
    byte b2 = 4;
    // int b3 = b1 + b2;
    short b3 = (short) (b1 + b2);
  4. ++、–、+=、-=、… 自带强制类型转换

2.5.3 char的类型转换

char类型的数据可以与十进制数遵循ASCII码表进行转换

1
2
3
0’~‘9’:48~57
'A'~'Z'65~90
'a'~'z'97~122

三,Random、Scanner

3.1 Random

概念:Random是系统提供的一个专门用于获取伪随机数的一个类,在这个类中提供了一些获取随机数的方法

使用步骤:

  1. 创建对象

    1
    Random r = new Random();
  2. 调用方法

    1
    2
    3
    double d = r.nextDouble();// 随机产生一个[0.0,1.0)范围内的浮点数
    int num1 = r.nextInt();// 随机产生一个int范围内的数
    int num2 = r.nextInt(n);// [0,n)

注:随机指定范围数据的公式:[a,b]: nextInt(b-a+1)+a

3.2 Scanner

概念:Scanner是系统提供的一个专门用于接收键盘输入的类

使用步骤:

  1. 创建对象

    1
    Scanner sc = new Scanner(System.in);
  2. 调用方法

    1
    2
    3
    4
    sc.nextInt();// 接收键盘输入的整数值
    sc.nextDouble();// 接收键盘输入的浮点数
    sc.next();// 接收键盘输入的字符串
    sc.nextLine();// 接收键盘输入的字符串

注:

  1. next()和nextLine()都用于接收字符串,但是next()不能接收空白字符串
  2. 必须保证所调用方法能接收输入的数据类型,否则会发生InputMisMatchException输入不匹配异常

补:

1
2
nextInt(int radix):radix表示进制,
例如:参数是2,也就是nextInt(2),表示键盘所输入的内容,系统会将其视为一个二进制数,转换成十进制数后返回